const { User } = require("../models");
const { failure } = require("../utils/responses");
const { UnauthorizedError } = require("../utils/errors");
const jwt = require("jsonwebtoken");
/**
 * 路由中间件-token认证
 * @param req
 * @param res
 * @param next
 * @returns {Promise<void>}
 */

module.exports = async (req, res, next) => {
  try {
    // 判断 token 是否存在
    const { token } = req.headers;
    if (!token) {
      throw new UnauthorizedError("当前接口需要认证才能访问");
    }
    // 验证 token 是否正确
    const decoded = jwt.verify(token, process.env.TOKEN_SECRET);
    // 解析存入的userId
    const { userId } = decoded;
    // 如果验证通过,将userId挂在到req上,方便后续中间件或者路由使用
    req.userId = userId;
    // 进入后续中间件或路由
    next();
  } catch (error) {
    failure(res, error);
  }
};
